/**
 * 模型拖拽上图功能示意
 */
import axios from "axios"
import { inject } from "vue"
import { entityKeys } from "@/common/symbolKeys"

const Cesium = DE.__namespace.Cesium

let viewer // 地图对象

// 初始化当前业务
export function onMounted(mapInstance) {
  viewer = mapInstance // 记录map
}

// 释放当前业务
export function onUnmounted() {
  viewer = null
}

// 地图上绘制模型实体
export function deployEquipModel(equipInfo, e, equipPlotLayer) {
  if (!equipInfo || !e) {
    return false
  }
  try {
    const lnglat = cartographic2To3(e, viewer)
    const pick = new Cesium.Cartesian2(e.x, e.y)
    console.log(equipInfo)
    const equip = new DE.Billboard(lnglat, equipInfo.svgUrl)
    console.log(equip)
    const equipStyle = {
      // 宽度（以像素为单位）
      width: 50,
      // // 高度（以像素为单位）
      height: 50,
      // 逆时针旋转
      // 大小是否以米为单位
      // sizeInMeters: false,
      // 相对于坐标的水平位置
      // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
      // // 相对于坐标的垂直位置
      // verticalOrigin: Cesium.VerticalOrigin.CENTER,
      // 设置颜色和透明度
      color: Cesium.Color.WHITE.withAlpha(1),
      // 该属性指定标签在屏幕空间中距此标签原点的像素偏移量
      // pixelOffset: new Cesium.Cartesian2(10, 0),
      // 应用于图像的统一比例。比例大于会1.0放大标签，而比例小于会1.0缩小标签。
      scale: 1.0
    }
    equip.setStyle(equipStyle)
    equip.setLabel(equipInfo.symbolName, {
      showBackground: false,
      font: "16px monospace",
      outlineColor: Cesium.Color.fromCssColorString("white").withAlpha(0.5),
      style: Cesium.LabelStyle.FILL_AND_OUTLINE, // FILL_AND_OUTLINE
      outlineWidth: 3,
      fillColor: Cesium.Color.BLACK,
      horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
      verticalOrigin: Cesium.VerticalOrigin.CENTER,
      pixelOffset: new Cesium.Cartesian2(0, 25)
    })
    equipPlotLayer.addOverlay(equip)
  } catch (e) {
    console.error(e)
    window.$message("拾取的位置不是有效地理位置，请重新拾取！", "error")
  }
}

// 屏幕坐标转经纬度
const cartographic2To3 = (event, viewer) => {
  const x = parseInt(event.x)
  const y = parseInt(event.y)
  const earthPosition = viewer.camera.pickEllipsoid({ x, y }, viewer.scene.globe.ellipsoid)
  const point = Cesium.Cartographic.fromCartesian(earthPosition, viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
  return [Cesium.Math.toDegrees(point.longitude), Cesium.Math.toDegrees(point.latitude), 0]
}

// 获取装备树状结构伪数据
export function getModelCategoryTree() {
  return axios({ url: "testData/jbConfig.json" })
}

// 根据装备类型获取伪数据
export async function getModelList(category, imgUrl) {
  const res = await axios({ url: "testData/jbConfig.json" })

  const layers = imgUrl.split("/")

  return new Promise((resolve, reject) => {
    let jbs = []
    res.data.forEach((firstLayerItem) => {
      if (firstLayerItem.text === layers[0]) {
        firstLayerItem.children &&
          firstLayerItem.children.forEach((innerItem) => {
            if (innerItem.text === layers[1]) {
              innerItem.children &&
                innerItem.children.forEach((item) => {
                  if (item.text === layers[2]) {
                    jbs = item.node
                  }
                })
            }
          })
      }
    })
    jbs = jbs.map((item) => {
      return {
        ...item,
        imgUrl: "./JBResource/" + imgUrl + `/${item.symbolCode}.png`,
        svgUrl: `./JBResource/JB/${item.libID}/${item.symbolCode}.svg`
      }
    })
    resolve(jbs)
  })
}
